讓我們切分各種畫面邏輯區塊,讓我們專案結構一目瞭然
雖然這個情況不是在隕石開發的時候遇到的,但是還是能夠說明一下 XD。之前在接手一個算是小有規模的專案時,在開啟他的 Main.storyboard 時,Loading 的彩球就開始瘋狂地轉,Mac 的風扇也開始運轉,Loading 結束之後看到的 Storyboard 彷彿是一個蜘蛛網 ?,看到散落在各地的 viewController 以及他們之間可怕的 Segue 連線,並且專案的資料夾管理也是非常複雜,很難馬上找到該個文件,如此一來在開發上就遇到了一個障礙。
因此,如果我們可以了解每個檔案應該在哪個功能資料夾中,那我們在搜尋及區分檔案應該在哪個資料夾時會非常快速。而在多人合作的情況下也能減少理解的困擾,其他人能夠透過資料夾的名稱以及結構名稱,找到需要處理的檔案項目。在分開處理功能時也能夠減少衝突。
我們能夠以專案整體的架構,像是 MVC、MVVM...。來大致區分每個文件的位置,而其他的額外功能,像是網路請求,我們可以將它獨立放在 Service 或 Networking 的資料夾中,而 Extension、SubClass 跟 Helper 也能夠讓他們獨立在一個資料夾。
你可以在網路上找到各種管理專案結構的文章,但我自己區分結構是參考這篇 StackOverflow 的文章。
而每個資料夾大致管理的功能為:
UITableViewCell
和 UICollectionViewCell
等。UIButton
的 reference 和點擊操作。有些人可能會以為一個專案只能有一個 Storyboard 來做為開發(當初的我),但是如果只有一個 Storyboard 的情況下來開發,你的畫面可能就會像是我上面提到的蜘蛛網的狀況。因此,我們能夠透過處理的功能不同,建立不同的 Storyboard。
像是如果我們的專案有下列幾個主要功能:
而這時候我們就能建立這幾個 Storyboard:
如此一來我們就能區分這些大功能了,而我們可以在各自的 Storyboard 建立所需的 ViewController。
同時我們也可以在 Modal, View, ViewController 資料夾中用該 Storyboard 名稱來建立子資料夾,並且建立所需文件。
如果我的 Storyboard 已經是蜘蛛網了怎麼辦??
放心,我們可以選擇我們 Stroyboard 一些想要切割的 ViewController,點選 Editor 選擇 Refactor to Storyboard...:
而這時我們可以把這些 ViewControlelr 切割到一個新增的 Storyboard 上:
按下確定之後,我們的 Cart 這個 ViewControlle 會被搬移到剛剛所新增的 ShoppingCart.storyboard 上,而我們的原本在 Storyboard 上有 Segue 連線的地方會出現 Storyboard Reference:
而他就是引用我們某個 Storyboard 上的 ViewController(也就是原有的 Cart):
而我們也能夠自己建立一個 Storyboard 的 reference,來連線到其他 Storyboard 的 ViewController:
而這邊如果 Referenced ID 留空的會是該 Storyboard 的 Initial ViewController,而如果想要引用特定的 ViewController 的話就必須設定 Referenced ID,也就是引用的 Storyboard ID。
有時候會碰到需要新增某個畫面,但是這個畫面是要新增在某個 Storyboard 還是建立一個 Xib 呢?如果以我的經驗來說,我會思考以下兩點:
如果需要重複使用的話,其實就可以直接建立一個 Xib 比較方便處理,如此一來無論是在哪個 storyboard 上面都能夠重複利用,常見的就是 Cell,以及客製化 Alert 和 Loading 畫面。
而如果這個畫面在哪個畫面都有可能出現,像是: 側邊欄或是快捷選單,對我們來說就是一個需要重複使用的畫面,因此我也會選擇 Xib 來處理。而畫面如果只會出現在某個流程中或畫面中,你也能夠直接在該畫面的 storyboard 中新增即可,因為它不會出現在其他畫面中。
而如果畫面是一段流程的話(第一次打開 App 的引導頁)的話,我們也能夠建立一個 Storyboard 來處理這個導覽頁。
其實不知道發什麼梗圖,只好發這張
最近剛好碰到了「有了需求,但沒有 deadline」
沒想到過幾天聽到 deadline 出現了,但就是兩個禮拜後 ?
這邊文章來提供一些專案結構管理的方式,以及整理跟重構 Storyboard 的方式,透過這些方式不僅能夠在獨立開發時管理好檔案,讓每個區塊專注於該功能開發。同時,再多人合作是也能夠減少衝突,每個人在各自的開發項目上處理。
如果有更好的專案結構管理方式,也歡迎與我分享。